<?php defined('SYSPATH') or die('No direct script access.');

class Model_ProductParser_Ebay extends Model_ProductParser_Abstract
{ 
    protected static $_instance = null;
    
    protected $_api_url = 'http://svcs.ebay.com/services/search/FindingService/v1';
    protected $_app_id  = 'Alexande-7a58-46b0-b875-f9b0d57ec488';
    
    public function parse()
    {   
        // Парсим хтмл как на али
        // Сортируем по дате - новые, собираем все (или 50, 100 страниц???), что выдаются, клеим дату окончания + 30 дней
        // Парсим каждый товар и актуализируем данные
        // доставка в россию??
    
           
        $categories = $this->_get_categoies();
        foreach ($categories as $parent_id => $items) {
            foreach ($items as $source_id => $category_id) {
                $params = array();               
                $params['categoryId'] = $source_id;
                
                $aspects  = $this->_get_aspects($params);
                
                /*echo '<pre>';
                print_r($aspects);
                
                $n = 1;
                $tmp = array();
                foreach ($aspects as $group => $values) {
                    $tmp[] = count($values);
                    $n *= count($values);    
                }
                echo implode(' * ', $tmp).'<br />';
                echo $n;
                die();  */
                
                foreach ($aspects as $group => $values) {
                    $params['aspectFilter.aspectName'] = $group;
                    foreach ($values as $value => $count) {
                        $params['aspectFilter.aspectValueName'] = $value;
                        
                        $data = null;
                        while ($current_page = $this->_get_curent_page($data)) {
                            echo $current_page.' ';
                            $params['paginationInput.pageNumber'] = $current_page;
                            $data     = $this->_get_data($params);
                            $products = $this->_get_products($data);
                            
                            echo '<pre>';
                            print_r($data);
                            die();        
                        }
                        die();
                    }    
                }
                
                echo '<pre>';
                print_r($aspects);
                die();
                
                   
            }    
        }
        
        
        /*
        &itemFilter(0).name=ListingType
         &itemFilter(0).value(0)=AuctionWithBIN
         &itemFilter(0).value(1)=FixedPrice 
         
         aspectFilter.aspectName=Megapixels&
   aspectFilter.aspectValueName=5.0+to+5.9+MP&
        */
     
        // пока работаем только со след. аспектами:
        //  Style
        //  Size (Women's)
        //  Brand
        //  Color
        //  Material
        //  только новые вещи
        //  купить сейчас
        // Получаем диаграмму аспектов для категории
        // для аспекта Стиль выбираем 10к и все пока, как получим норм доступ к апи - переделаем
        
    
         
        /*// В разделе женская одежда есть список подкатегорий без кол-ва
        // Далее получаем диаграмму аспектов для всех
        // Вручную распределяем аспект Тип по подкатегориям нашим
        // Рекурсия: (возможно не рекурсия, надо посмотреть самые большие категории на уровень вложенности, или отсекать ценой)
        // Если кол-во товаров аспекта меньше 10к, то парсим его полностью
        // Если ... больше 10к, то добавляем к нему другой аспект   
        
        // Для каждого аспета выбираем 10к товаров и все. Уникальные - добавялем с аспектом, неуник - обновляем аспект
        //(возможно, нужно одновременно выставлять все интересующие нас аспекты, то не будет дублей и не надо будет апдейтить товары
        // пока не делаем, много запросов надо) 
        * 
        */
    }  
    
    protected function _get_api_url($params)
    {
        $setting_params = array(
            'OPERATION-NAME'        => 'findItemsAdvanced',
            'SERVICE-VERSION'       => '1.0.0',
            'SECURITY-APPNAME'      => $this->_app_id,
            'RESPONSE-DATA-FORMAT'  => 'JSON',
            'REST-PAYLOAD'          => 'true',
        );
        $setting_params['itemFilter'] = array(
            'Condition'     => array(1000, 1500),                       // Новый, Новый без ярлыков  
            'ListingType'   => array('AuctionWithBIN', 'FixedPrice'),   // Buy It Now, и просто фикс. цена
        );
        $params = array_merge($setting_params, $params);
        
        $_params = array();
        if (isset($params['itemFilter'])) {
            $n = 0;
            foreach ($params['itemFilter'] as $name => $value) {
                $_params["itemFilter({$n}).name"] = $name;
                if (is_array($value)) {
                    $k = 0;
                    foreach ($value as $_value) {
                        $_params["itemFilter({$n}).value({$k})"] = $_value; 
                        $k++;   
                    }    
                } else {
                    $_params["itemFilter({$n}).value"] = $value;     
                } 
                $n++;  
            } 
            unset($params['itemFilter']);   
        }
        
        
        foreach ($params as $name => $param) {
            $_params[$name] = $param;        
        }
        
        return $this->_api_url.'?'.http_build_query($_params);
    }  
    
    protected function _get_data($params)
    {
        $data = file_get_contents($this->_get_api_url($params));
        $data = json_decode($data, true);
        if (isset($data['findItemsAdvancedResponse'][0])) {
            return $data['findItemsAdvancedResponse'][0];
        }
        return null;
    }
    
    protected function _get_aspects($params)
    {
        $needed_aspects = array('Style', /*'Size (Women\'s)', 'Brand', 'Color', 'Material'*/); 
        $min_count      = 100;
        
        $params['outputSelector'] = 'AspectHistogram';
        $data = $this->_get_data($params);
        if (isset($data['aspectHistogramContainer'][0]['aspect'])) {
            $aspects = $data['aspectHistogramContainer'][0]['aspect'];  
            $_aspects = array();
            foreach ($aspects as $aspect) {
                if (in_array($aspect['@name'], $needed_aspects)) {
                    $_aspects[$aspect['@name']] = array();
                    foreach ($aspect['valueHistogram'] as $item) {
                        if ($item['count'][0] > $min_count) {
                            $_aspects[$aspect['@name']][$item['@valueName']] = $item['count'][0];        
                        }
                    }    
                }    
            } 
            return $_aspects; 
        } 
        return null;   
    }
    
    protected function _get_curent_page($data)
    {
        if (!$data) {
            return 1;
        }
        $page_number = isset($data['paginationOutput'][0]['pageNumber'][0]) ? $data['paginationOutput'][0]['pageNumber'][0] : null;  
        $total_pages = isset($data['paginationOutput'][0]['totalPages'][0]) ? $data['paginationOutput'][0]['totalPages'][0] : null;
        if ($page_number && $total_pages) {
            if ($page_number == $total_pages) {
                return null;
            }   
            $current_page = $page_number + 1;
            if ($current_page > 100) {
                return null;
            }
            return $current_page;
        }
        return null;
    }
    
    protected function _get_products($data)
    {
        
    }
    
    protected function _get_categoies()
    {   
        return array(
            '15724' => array(           // Одежда для женщин
                '137085' => 0,
            ),
        );
    }          
}